﻿namespace sdk_cop;

class ConsumePurchaseShowPayV1TestUI
{

    ///APP_ID：通过内管查看详情，可获取对应的组织机构、接入方式、公钥等信息；APP管理中查看
    ///MY_PRIVATE_KEY:RSA私钥，可以通过sdk包下面bin文件夹里面的工具生成一对公私钥
    ///APIGW_PUBLIC_KEY:网关公钥
    protected static string APP_ID = "";
    protected static string MY_PRIVATE_KEY = "";
    protected static string APIGW_PUBLIC_KEY = "";
    protected static string SIGN_TYPE = "RSA2";
 

    static void Main(string[] args)
    {
        /// <summary>
        /// 页面服务实现类(RSA加解密方式) 
        /// </summary>
        /// <param name="APP_ID">应用id</param>
        /// <param name="MY_PRIVATE_KEY">RSA私钥</param>
        /// <param name="APIGW_PUBLIC_KEY">网关公钥</param>
        /// <returns>页面服务实现类实例</returns>
        UiIcbcClient client = new UiIcbcClient(APP_ID, SIGN_TYPE, MY_PRIVATE_KEY, IcbcConstants.CHARSET_UTF8);
        ///新建服务请求类实例
        ConsumePurchaseShowPayRequestV1 request = new ConsumePurchaseShowPayRequestV1();
        ///新建服务请求类的业务参数类，该类为内部类
        ConsumePurchaseShowPayRequestV1.ConsumePurchaseShowPayRequestV1Biz bizContent = new ConsumePurchaseShowPayRequestV1.ConsumePurchaseShowPayRequestV1Biz();
        ///为请求类设置各种参数

        request.setServiceUrl(" https://gw.open.icbc.com.cn/ui/cardbusiness/aggregatepay/b2c/online/ui/consumepurchaseshowpay/V1");

        bizContent.setMerId(""); //商户编号
        bizContent.setOutTradeNo(""); //商户订单号，只能是数字、大小写字母，且在同一个商户号下唯一
        bizContent.setMerPrtclNo(""); //收单产品协议编号
        bizContent.setOrderAmt("1"); //订单金额，单位为分
        bizContent.setNotifyUrl(""); //异步通知商户URL，端口必须为443或80
        bizContent.setIcbcAppid(APP_ID); //工行API平台的APPID
        bizContent.setOpenId("468455"); //第三方用户标识，微信支付上送用户在商户APPID（指商户在微信开放平台的APPID）下的唯一标识；支付宝支付上送用户的唯一标识。若该字段不上送，取用户在工行APPID（指工行在微信开放平台的APPID）下的唯一标识
        bizContent.setSaledepname("小卖铺-测试"); //门店名称，用于显示在买单页上。该长度限制是按GBK编码的字节长度，如”测试”，则所占长度为4。
        bizContent.setBody("小卖铺"); //微信商品描述，传入微信公众号名称-实际商品名称。微信支付时必输，非微信支付的送空字符串
        bizContent.setSubject(""); //支付宝的订单标题，支付宝支付时必输，非支付宝支付的送空字符串
        bizContent.setNotifyType(""); //通知类型，表示在交易处理完成后把交易结果通知商户的处理模式。取值“HS”：在交易完成后将通知信息，主动发送给商户，发送地址为notify_url指定地址； 取值“AG”：在交易完成后不通知商户。不送或送空，默认为”HS”
        bizContent.setResultType(""); //结果发送类型，通知方式为HS时有效。取值“0”：无论支付成功或者失败，银行都向商户发送交易通知信息；取值“1”，银行只向商户发送交易成功的通知信息。不送或送空，默认为”0”
        bizContent.setMerAcct(""); //商户账号，商户入账账号，只能交易时指定。（商户付给银行手续费的账户，可以在开户的时候指定，也可以用交易指定方式；用交易指定方式则使用此商户账号）。该字段暂不支持上送
        bizContent.setExpireTime("300"); //订单失效时间，单位为秒，建议大于60秒
        bizContent.setAttach(""); //附加数据，在查询API和支付通知中原样返回，该字段主要用于商户携带订单的自定义数据
        bizContent.setReturnUrl(""); //支付成功回显页面，支付成功后，跳转至该页面显示。默认跳转到工行的广告页
        bizContent.setPayLimit(""); //支付方式限定，上送”no_credit“表示不支持信用卡支付；上送“no_balance”表示仅支持银行卡支付；不上送或上送空表示无限制。暂只支持微信公众号
        bizContent.setShopAppid(""); //商户在微信开放平台的APPID，微信支付且openId有值时必送
        bizContent.setOrderApdInf(""); //订单附加信息
        bizContent.setDetail(""); //商品详细描述，对于使用单品优惠的商户，该字段必须按照规范上传。微信与支付宝的规范不同，请根据支付方式对应相应的规范上送
        bizContent.setCustName(""); //客户姓名（仅实名认证输入）
        bizContent.setCustCertType(""); //证件类型（仅实名认证输入）
        bizContent.setCustCertNo(""); //证件号码（仅实名认证输入）
        bizContent.setGoodsTag(""); //订单优惠标记

        request.setBizContent(bizContent);

        try
        {
            Console.WriteLine(client.buildPostForm(request));
        }
        catch (System.Net.WebException e) //无法连接到远程服务器，网络异常
        {
            throw;
        }
        catch (Exception ex)//抛出其他异常
        {
            throw;
        }

    }
}

